<?php
/**
 * Декоратор, который в момент отправки данных, дополнительно подсвечивает не валидные поля
 *
 * Если в самой форме установить атрибут "doNotValidateOnSubmit", то это отменить полностью клиентскую валидаци по
 * событию формы onSubmit
 * @example
 *      $form->setAttrib('doNotValidateOnSubmit', true);
 */
class Wlib_Form_Dojo_Decorator_ValidateOnSubmit extends Zend_Form_Decorator_Abstract
{
    static protected $_loadFormExtendJsCode = false;

    /**
     * Ренедеринг декоратора
     * 
     * @param string $content
     * @return string
     */
    public function render($content)
    {
        $form = $this->getElement();


        if(!self::$_loadFormExtendJsCode) {

            $js =<<<EOJ
                dojo.extend(dijit.form.Form, {
                    doNotValidateOnSubmit: false,
                    onSubmit: function(e) {
                        if(!this.doNotValidateOnSubmit) {
                            return this.isValid();
                        }
                    }
                });
EOJ;
            $form->getView()->dojo()->addJavascript($js);

            self::$_loadFormExtendJsCode = true;
        }

        if($form->getAttrib('doNotValidateOnSubmit')) {
            return $content;
        }

        $formId = $form->getId();

        if(empty($formId)) {
            $formId = get_class($form) . '_random_id_' . rand();
            $form->setAttrib('id', $formId);
        }

        $form->getView()->dojo()->onLoadCaptureStart();
        ?>
        function () {
            dojo.connect(dijit.byId("<?=$formId?>"), "onSubmit", function () {
                var form = dijit.byId("<?=$formId?>");
                if (!form.validate()) {
                    return false;
                }
                return true;
            });
        }
        <?
        $form->getView()->dojo()->onLoadCaptureEnd();

        return $content;
    }
}
